package com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.ownerContract;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

import static com.xiaoshuidi.cloud.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
import static com.xiaoshuidi.cloud.module.contract.util.date.DateUtils.FORMAT_DATE;

@Schema(description = "管理后台 - 业主合同退租 Request VO")
@Data
@ToString(callSuper = true)
public class ContractHouseOwnerCancelReqVO {
    /**
     * 业主合同编号
     */
    @Schema(description = "业主合同编号")
    @NotNull(message = "业主合同编号不能为空")
    private Long ownerContractId;

    /**
     * 退租类型
     */
    @Schema(description = "退租类型")
    @NotNull(message = "退租类型不能为空")
    private String cancelType;

    /**
     * 退租时间
     */
    @Schema(description = "退租时间")
    @NotNull(message = "退租时间不能为空")
    @DateTimeFormat(pattern = FORMAT_DATE)
    @JsonFormat(pattern = FORMAT_DATE, timezone = TIME_ZONE_DEFAULT)
    private LocalDate evictionTime;

    /**
     * 退租原因
     */
    @Schema(description = "退租原因")
    private String evictionReason;

    /**
     * 房租处理方式
     */
    @Schema(description = "房租处理方式")
    @NotNull(message = "房租处理方式不能为空")
    private Integer rentHandleType;

    /**
     * 房租处理金额
     */
    @Schema(description = "房租处理金额")
    @NotNull(message = "房租处理金额不能为空")
    @Min(value = 0, message = "房租处理金额不能小于0")
    private BigDecimal rentHandleAmount;

    /**
     * 押金处理方式
     */
    @Schema(description = "押金处理方式")
    @NotNull(message = "押金处理方式不能为空")
    private Integer depositHandleType;

    /**
     * 押金处理金额
     */
    @Schema(description = "押金处理金额")
    @NotNull(message = "押金处理金额不能为空")
    @Min(value = 0, message = "押金处理金额不能小于0")
    private BigDecimal depositHandleAmount;


    /**
     * 各种费项
     */
    @Schema(description = "各种费项")
    private List<ContractOwnerEvictionFeeVO> feeList;

    /**
     * 月租金
     */
    private BigDecimal monthRent;

    /**
     * 月租金
     */
    private LocalDate startTime;
    /**
     * 月租金
     */
    private LocalDate endTime;

    /**
     * 是否需要审批
     */
    private Boolean isBpmApprove;

    /**
     * 审批操作人
     */
    private String operator;

}
